package com.ctshk.rpc.hotel.service;

import com.ctshk.common.dto.Result;
import com.ctshk.common.model.PageResponse;
import com.ctshk.common.model.TokenUser;
import com.ctshk.rpc.hotel.dto.*;
import com.ctshk.rpc.hotel.dto.booking.HotelBookingDetailsDTO;
import com.ctshk.rpc.hotel.dto.booking.HotelBookingRoomDTO;
import com.ctshk.rpc.hotel.dto.h5.HotelRoomDTO;
import com.ctshk.rpc.hotel.req.*;
import com.ctshk.rpc.hotel.req.booking.HotelDetailsQueryReq;
import com.ctshk.rpc.hotel.req.h5.HotelDetailsQueryH5Req;
import com.ctshk.rpc.hotel.req.h5.RoomDetailsQueryH5Req;

import java.util.List;

/**
 * <p>RSAUtil
 * 酒店资源 服务类
 * </p>
 *
 * @author yinhuan
 * @since 2021-03-03
 */
public interface IHotelService{
    /**
     * 酒店列表
     * @param hotelListQueryReq
     * @return
     */
    PageResponse<HotelListManagerDTO> queyList(HotelListManagerReq hotelListQueryReq);


    /**
     * 新增酒店
     * @param req
     * @param user
     */
    Result saveHotel(HotelReq req, TokenUser user);


    /**
     * 修改酒店
     * @param req
     * @param user
     */
    Result updateHotel(HotelReq req, TokenUser user);


    /**
     * 查询酒店详情
     * @param id
     * @return
     */
    HotelListDTO queryDetail(Long id);

    /**
     * 根据id数组查询酒店详情
     * @param idList
     * @return
     */
    List<HotelListDTO> queryDetailList(List<Long> idList);

    /**
     * 酒店房型資源列表查询
     * @param hotelQueryReq
     * @return
     */
    PageResponse<HotelQueryDTO> queryAllHotelList(HotelQueryReq hotelQueryReq);

    /**
     * 酒店列表查询
     * @param req
     */
    PageResponse<HotelQueryListDTO> queryList(HotelOrderQueryReq req, Long userId);

    /**
     * 酒店列表查询-C端H5
     * @param req
     */
    PageResponse<HotelQueryListDTO> queryListH5(com.ctshk.rpc.hotel.req.h5.HotelQueryReq req);

    /**
     * 酒店推薦列表查询
     */
    List<HotelQueryListDTO> queryRecommendationList(Long userId);

    /**
     * 获取推薦酒店ids-H5
     */
    List<HotelQueryListDTO> queryRecommendationListH5(String now);

    /**
     * 获取推薦酒店ids-PC
     */
    List<HotelQueryListDTO> queryRecommendationListPC(String now, String city);
    /**
     * 预订中心-酒店详情查询
     * @param req       请求参数
     * @param userId    当前用户
     * @return
     */
    HotelBookingDetailsDTO details(HotelDetailsQueryReq req, Long userId);

    /**
     * 酒店详情查询-C端H5
     * @param req
     * @return
     */
    Result<HotelBookingDetailsDTO> detailsH5(HotelDetailsQueryH5Req req);

    /**
     * 房间详情查询-C端H5
     * @param req
     * @return
     */
    HotelRoomDTO detailsRoomH5(RoomDetailsQueryH5Req req);
}
